package schema

import (
	"errors"
)

// Menu 菜单管理
type Menu struct {
	ID        int64  `json:"id" bson:"_id" structs:"id"`                        // 唯一标识(自增ID)
	RecordID  string `json:"record_id" bson:"record_id" structs:"record_id"`    // 记录内码(uuid)
	Code      string `json:"code" bson:"code" structs:"code"`                   // 菜单编号
	Name      string `json:"name" bson:"name" structs:"name"`                   // 菜单名称
	Type      int    `json:"type" bson:"type" structs:"type"`                   // 菜单类型(10：系统 20：模块 30：功能 40：动作)
	Sequence  int    `json:"sequence" bson:"sequence" structs:"sequence"`       // 排序值
	Icon      string `json:"icon" bson:"icon" structs:"icon"`                   // 菜单图标
	Router    string `json:"router" bson:"router" structs:"router"`             // 跳转路由
	LevelCode string `json:"level_code" bson:"level_code" structs:"level_code"` // 分级码
	ParentID  string `json:"parent_id" bson:"parent_id" structs:"parent_id"`    // 父级内码
	Status    int    `json:"status" bson:"status" structs:"status"`             // 状态(1:启用 2:停用)
	Creator   string `json:"creator" bson:"creator" structs:"creator"`          // 创建人
	Created   int64  `json:"created" bson:"created" structs:"created"`          // 创建时间戳
	Deleted   int64  `json:"deleted" bson:"deleted" structs:"deleted"`          // 删除时间戳
}

// Validate 验证参数
func (a *Menu) Validate() error {
	if a.Name == "" ||
		a.Type == 0 ||
		a.Status == 0 {
		return errors.New("无效的请求参数")
	}
	return nil
}

// MenuQueryParam 菜单查询参数
type MenuQueryParam struct {
	Name     string // 名称
	Type     int    // 菜单类型(10：系统 20：模块 30：功能 40：动作)
	ParentID string // 父级内码
	Status   int    // 状态(1:启用 2:停用)
}

// MenuSelectParam 菜单选择数据查询参数
type MenuSelectParam struct {
	Name   string // 名称
	Status int    // 状态(1:启用 2:停用)
}

// MenuSelect 菜单选择数据
type MenuSelect struct {
	RecordID  string `json:"record_id" bson:"record_id" structs:"record_id"`    // 记录内码(uuid)
	Name      string `json:"name" bson:"name" structs:"name"`                   // 名称
	ParentID  string `json:"parent_id" bson:"parent_id" structs:"parent_id"`    // 父级内码
	Type      int    `json:"type" bson:"type" structs:"type"`                   // 菜单类型(10：系统 20：模块 30：功能 40：动作)
	LevelCode string `json:"level_code" bson:"level_code" structs:"level_code"` // 分级码
}
